<?php


namespace app\index\controller;


use think\Config;
use think\Log;
use think\Request;
use think\View;
use Yansongda\Pay\Pay;

class Alipay
{
    protected $config = [];

    public function __construct()
    {
        $this->config = Config::get('alipay');
        // 初始化配置
        Pay::config($this->config);
    }

    public function index()
    {
        // 支付界面
        $view = new View();
        return $view->fetch('../view/index');
    }

    public function web()
    {
        // 传入参数，获取跳转url
        $result = Pay::alipay()->web([
            'out_trade_no' => '' . time(),
            'total_amount' => '0.05',
            'subject' => 'yansongda 测试 - 1',
            '_method' => 'get',
        ]);

        return $result->getHeaders()['Location'][0];
    }

    public function returnCallback()
    {
        // 支付回调
        $data = Pay::alipay()->callback();
        var_dump($data);
        Log::info('returnCallback');
        Log::info($data);

        // 订单号：$data->out_trade_no
        // 支付宝交易号：$data->trade_no
        // 订单总金额：$data->total_amount
    }

    public function notifyCallback()
    {
        $alipay = Pay::alipay();

        try {
            $data = $alipay->callback();
            Log::info('notifyCallback');
            Log::info($data);
            var_dump($data);

            // 请自行对 trade_status 进行判断及其它逻辑进行判断，在支付宝的业务通知中，只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时，支付宝才会认定为买家付款成功。
            // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号；
            // 2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额）；
            // 3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）；
            // 4、验证app_id是否为该商户本身。
            // 5、其它业务逻辑情况
        } catch (\Exception $e) {
            // $e->getMessage();
        }

        return json($alipay->success());
    }
}